IndexedDB is a way to store data in the browser.
It lets us store larger amounts of data than local storage in an asynchronous way.
Dexie makes working with IndexedDB easier.
In this article, we’ll take a look at how to start working with IndexedDB with Dexie.
Collection Count
We can get the number of results from a collection with the count method.
For example, we can write:
const db = new Dexie("friends");
db.version(1).stores({
friends: "id, name, age"
});
(async () => {
await db.friends.put({
id: 1,
name: "jane",
age: 78
});
await db.friends.put({
id: 2,
name: "mary",
age: 76
});
const count = await db.friends
.where("name")
.equalsIgnoreCase("jane")
.count()
console.log(count)
})()
to get the query results and then call count on it to get the count of the results.
Delete Items
We can call the delete all objects in the query with the delete method.
For instance, we can write:
const db = new Dexie("friends");
db.version(1).stores({
friends: "id, name, age"
});
(async () => {
await db.friends.put({
id: 1,
name: "jane",
age: 78
});
await db.friends.put({
id: 2,
name: "mary",
age: 76
});
await db.friends
.where("name")
.equalsIgnoreCase("jane")
.delete()
})()
We just call delete on the collection to delete all the items in the collection.
Sort Descending
We can sort items in descending order with the desc method.
For example, we can write:
const db = new Dexie("friends");
db.version(1).stores({
friends: "id, name, age"
});
(async () => {
await db.friends.put({
id: 1,
name: "jane",
age: 78
});
await db.friends.put({
id: 2,
name: "mary",
age: 76
});
const someFriends = await db.friends
.where('age')
.above(25)
.desc()
.toArray()
console.log(someFriends)
})()
to sort the items in descending order.
Each
We can loop through any items returned in a collection with the each method.
For example, we can write:
const db = new Dexie("friends");
db.version(1).stores({
friends: "id, name, age"
});
(async () => {
await db.friends.put({
id: 1,
name: "jane",
age: 78
});
await db.friends.put({
id: 2,
name: "jane",
age: 76
});
await db.friends.each(friend => console.log(friend.name));
})()
to call each to loop through each item in the friends table.
Loop Through Keys in Collections
We can loop through each key returned in the collection with the eachKey method.
For instance, we can write:
const db = new Dexie("friends");
db.version(1).stores({
friends: "id, name, age"
});
(async () => {
await db.friends.put({
id: 1,
name: "jane",
age: 78
});
await db.friends.put({
id: 2,
name: "jane",
age: 76
});
await db.friends
.where('age')
.above(25)
.eachKey(key => console.log(key));
})()
We make the query that queries the age field.
Then eachKey will have the age value for each result.
Loop Through Each Primary Key
We can loop through each primary key in a collection with the eachPrimaryKey method.
For example, we can write:
const db = new Dexie("friends");
db.version(1).stores({
friends: "id, name, age"
});
(async () => {
await db.friends.put({
id: 1,
name: "jane",
age: 78
});
await db.friends.put({
id: 2,
name: "jane",
age: 76
});
await db.friends
.orderBy('name')
.eachPrimaryKey(id => console.log(id));
})()
We call eachPrimaryKey to log the value of the id field in our collection.
Conclusion
We can work with collection with various methods provided by Dexie.